const { DocumentManager } = require('./build/document-manager');
const path = require('path');
const fs = require('fs');

async function testAsyncRefresh() {
  console.log('=== 测试异步文档刷新功能 ===\n');
  
  const documentManager = new DocumentManager();
  const testDir = path.join(__dirname, 'example-docs');
  
  // 检查测试目录是否存在
  if (!fs.existsSync(testDir)) {
    console.error(`测试目录不存在: ${testDir}`);
    return;
  }
  
  try {
    // 1. 启动异步任务
    console.log('1. 启动异步刷新任务...');
    console.log(`目标目录: ${testDir}`);
    const taskId = await documentManager.startRefreshDocumentsAsync(testDir, true);
    console.log(`任务已启动，ID: ${taskId}\n`);
    
    // 2. 监控任务状态
    console.log('2. 监控任务进度...');
    let task = documentManager.getTaskStatus(taskId);
    let iterations = 0;
    const maxIterations = 30; // 最多等待30秒
    
    while (task && (task.status === 'pending' || task.status === 'running') && iterations < maxIterations) {
      console.log(`状态: ${task.status}`);
      console.log(`进度: ${task.progress.processedFiles}/${task.progress.totalFiles}`);
      if (task.progress.currentFile) {
        console.log(`当前文件: ${path.basename(task.progress.currentFile)}`);
      }
      console.log('---');
      
      // 等待1秒后再次检查
      await new Promise(resolve => setTimeout(resolve, 1000));
      task = documentManager.getTaskStatus(taskId);
      iterations++;
    }
    
    // 3. 显示最终结果
    console.log('\n3. 最终结果:');
    if (task) {
      console.log(`状态: ${task.status}`);
      if (task.stats) {
        console.log(`处理的文件总数: ${task.stats.totalFiles}`);
        console.log(`更新的文件: ${task.stats.updatedFiles}`);
        console.log(`跳过的文件: ${task.stats.skippedFiles}`);
        console.log(`创建的块: ${task.stats.chunksCreated}`);
        console.log(`生成的简介: ${task.stats.briefingsGenerated}`);
      }
      if (task.error) {
        console.log(`错误: ${task.error}`);
      }
      
      const duration = task.endTime ? task.endTime.getTime() - task.startTime.getTime() : 0;
      console.log(`耗时: ${Math.round(duration / 1000)}秒`);
    } else {
      console.log('无法获取任务状态');
    }
    
    // 4. 显示所有任务
    console.log('\n4. 所有任务列表:');
    const allTasks = documentManager.getAllTasks();
    allTasks.forEach((t, index) => {
      console.log(`任务 ${index + 1}: ${t.id} - ${t.status}`);
    });
    
  } catch (error) {
    console.error('测试失败:', error);
    console.error('错误详情:', error.stack);
  }
}

// 测试同时启动多个任务
async function testMultipleTasks() {
  console.log('\n\n=== 测试同时启动多个任务 ===\n');
  
  const documentManager = new DocumentManager();
  const testDir = path.join(__dirname, 'example-docs');
  
  try {
    // 启动两个任务
    const taskId1 = await documentManager.startRefreshDocumentsAsync(testDir, true);
    const taskId2 = await documentManager.startRefreshDocumentsAsync(testDir, false);
    
    console.log(`任务1 ID: ${taskId1}`);
    console.log(`任务2 ID: ${taskId2}`);
    
    // 等待一段时间查看状态
    setTimeout(() => {
      const allTasks = documentManager.getAllTasks();
      console.log('\n所有任务状态:');
      allTasks.forEach(task => {
        console.log(`${task.id}: ${task.status} (${task.progress.processedFiles}/${task.progress.totalFiles})`);
      });
    }, 3000);
    
  } catch (error) {
    console.error('多任务测试失败:', error);
  }
}

// 运行测试
if (require.main === module) {
  testAsyncRefresh()
    .then(() => testMultipleTasks())
    .catch(console.error);
}
